<?php

class ControllerFiltroConsultaPadrao extends ControllerManutencaoPadrao {
    /** @var ViewFiltroConsultaPadrao */
    protected $View;
    /** @var ModelFiltroConsulta */
    protected $Model;    

    public function __construct(ViewFiltroConsultaPadrao $View, ModelFiltroConsulta $FiltroPadrao) {
        $this->Principal = Principal::getInstance();        
        $this->setView($View);
        $this->setModel($FiltroPadrao);
        if ($this->View->isEnviada()) {
            $this->setDadosViewToModel();            
        }
        else {
            $this->setDadosModelToView();
        }
    }

    protected function getInstanceModel() {
        return new ModelFiltroConsulta();
    }

    protected function getInstancePersistencia() {
        
    }

    protected function getInstanceView() {
        
    }

    public function aplicaFiltros(&$sSql) {
        $sOperador = (stripos($sSql, 'where') === false) ? ' where ' : ' and ';
        if ($this->Model->getValorFiltro()) {
            $sFiltro = $this->Model->getCampoFiltro();
            if ($this->Model->getOperadorFiltro() == 'ilike') {
                $sFiltro = 'lower(' . $this->Model->getCampoFiltro() . ") ilike '%" . strtolower($this->Principal->getConexao()->newQuery()->escapeString($this->Model->getValorFiltro(), false)) . "%'";
            } 
            else {
                $sFiltro = $this->Model->getCampoFiltro() . ' ' . $this->Model->getOperadorFiltro() . " " . $this->Principal->getConexao()->newQuery()->escapeString($this->Model->getValorFiltro()) . "";
            }
            $sSql .= $sOperador . $sFiltro;
        }
    }

    public function aplicaOrdem(&$sSql) {
        if ($this->Model->getCampoOrdem()) {
            $sSql .= ' order by ' . $this->Model->getCampoOrdem() . ' ' . $this->Model->getOperadorOrdem();
        }
    }

}

?>
